﻿
类 机读文本类//本类封装了SAPI.SpVoice和SAPI.SpFileStream的基本常用功能大部分需求都可以轻松实现
	COM对象类 SpVoice
	函数 逻辑型 初始化()
		COM初始化(NULL)
		返回 SpVoice.创建("SAPI.SpVoice")
	//@备注 必须先成功创建SAPI.SpVoice否则其他功能将无法使用，
	函数 整型 置音库(文本型 库名称)
		COM对象类 临时对象 = SpVoice.方法("GetVoices", "Name")
		整型 库数量 = 临时对象.取属性("Count")
		计次循环 整型 i = 0; 库数量
			COM对象类 库对象 = 临时对象.方法("Item", i)
			文本型 临时 = 库对象.方法("GetDescription")
			调试输出(临时)
			如果 临时 == 库名称
				逻辑型 ret = SpVoice.置属性("Voice", 库对象.取COM对象())
				返回 ret;
		返回 假

	函数 整型 取数量()
		返回 SpVoice.取属性("Count") 

	//@备注 通过已挂载的音库，把文本转换成为语音输出
	//@参数 欲朗读的文本。
	函数 逻辑型 朗读(文本型 文本)
		返回 SpVoice.方法("Speak", 文本, 0)

	//@备注 设置已挂载音库的声音大小
	//@参数 默认=50，范围是0到100之间。
	函数 逻辑型 置音量(整型 音量)
		如果 音量 > 100
			音量 = 100
		如果 音量 < 0
			音量 = 0
		返回 SpVoice.置属性("Volume", 音量)

	//@备注 设置已挂载音库的语速快慢，
	//@参数 默认=0，范围是从-10到10之间。
	函数 逻辑型 置语速(整型 语速)
		如果 语速 > 10
			语速 = 10
		如果 语速 < -10
			语速 =- 10
		返回 SpVoice.置属性("Rate",语速)

	//@备注 设置已挂载音库的声音音调，成功返回XML标记文本将此文本提供给朗读即可
	//@参数 欲朗读的文本
	//@参数 默认=0，范围是-10到10之间。
	函数 文本型 置声调(文本型 文本, 整型 声调)
		如果 声调 > 10
			声调 = 10
		如果 声调 < -10
			声调 =- 10
		返回 文本组合("<pitch absmiddle=", "\"", 到文本(声调), "\"", ">", 文本, "</pitch>")

	//@备注 暂停正在朗读的文本
	函数 逻辑型 暂停()
		返回 SpVoice.置属性("Pause")

	//@备注 继续被暂停的朗读
	函数 逻辑型 继续()
		返回 SpVoice.置属性("Resume")

	//@备注 停止正在朗读的文本。
	函数 逻辑型 停止()
		返回 SpVoice.方法 ("Speak", "", 2)

	//@备注 等待正在朗读的线程，不使用本子程序语音将会在后台线程播放，不影响程序执行，注意：因为等待会卡住本线程的执行，会导致[回调]被延迟处理，所以最好不要同时使用等待和[回调]，请在朗读开始后调用本子程序。
	//@参数 单位为毫秒，如果大于0将等待直到语音输出完毕或超时才释放主进程，如果小于0表示不设超时时间，等待直到语音输出完毕才释放主进程。
	函数 逻辑型 等待(整型 超时直)
		返回 SpVoice.方法("WaitUntilDone", 超时直)

	函数 销毁()
		SpVoice.清理()
		COM清理()

